/*
============================================================================
 Name        : pd_unicode_test.c
 Author      : Jian (raphyer@hotmail.com)
 Version     :
 Copyright   : GPL
 Description : pd_unicode_test.c - source file
============================================================================
*/

/* INCLUDE FILES */
#include "pd_unicode.h"
#include "dd_utf8.h"
#include "pd_file.h"
#include "pd_unicode.h"

#define __TEST_UTF8_NAME L"c:\\test\\utf8.txt"
#define __TEST_UNI_NAME  L"c:\\test\\uni.txt"


static DD_BOOL _testPdUnicode() 
{
    __DD_ASSERT_DEFENSE(pd_unicode_len(L"") == 0, return DD_FALSE) ;
    __DD_ASSERT_DEFENSE(pd_unicode_len(L"1") == 1, return DD_FALSE) ;
    __DD_ASSERT_DEFENSE(pd_unicode_len(L"1234567890") == 10, return DD_FALSE) ;
    
    return DD_TRUE ;
}

static DD_BOOL _testUtf8UnicodeConvert() 
{
    DD_INT size        = 0 ;
    DD_UTF8* utfBuf    = DD_NULL ;
    DD_UNICODE* uniBuf = DD_NULL ;
    pd_file* uniFile   = DD_NULL ;
    DD_UTF8* covUtf8   = NULL ;   
    pd_file* file      = pd_file_open(__TEST_UTF8_NAME, PD_FILE_READ) ;

    __DD_ASSERT_DEFENSE(file, return DD_FALSE) ;

    size = pd_file_size(file) ;

    __DD_ASSERT_DEFENSE(size >= 0, return DD_FALSE) ;

    utfBuf = (DD_UTF8*)DD_MALLOC(size + 1) ;

    pd_file_read(file, utfBuf, size) ;

    uniBuf = dd_utf8_to_unicode(utfBuf) ;

    uniFile = pd_file_open(__TEST_UNI_NAME, PD_FILE_CREATE) ;

    pd_file_write(uniFile, uniBuf, pd_unicode_len(uniBuf) * sizeof(DD_UNICODE)) ;

    covUtf8 = dd_unicode_to_utf8(uniBuf) ;

    __DD_ASSERT_DEFENSE(DD_STRLEN(utfBuf) == DD_STRLEN(covUtf8), return DD_FALSE) ;

    __DD_ASSERT_DEFENSE(DD_MEMCMP(utfBuf, covUtf8, DD_STRLEN(utfBuf)) == 0, return DD_FALSE) ;

    DD_FREE(covUtf8) ;
    DD_FREE(uniBuf) ;
    DD_FREE(utfBuf) ;

    pd_file_close(uniFile) ;
    pd_file_close(file) ;

    return DD_TRUE ;
}

DD_BOOL pd_unicode_test() 
{
    if (!_testPdUnicode()) {
        DD_LOG("_testPdUnicode FAILED") ;
        return DD_FALSE ;
    } 

    if (!_testUtf8UnicodeConvert()) {
        DD_LOG("_testUtf8UnicodeConvert FAILED") ;
        return DD_FALSE ;
    } 
   
    return DD_TRUE ;
}


/* End of File */
